package cn.zyb.feignClient;

import cn.zyb.domain.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

// 指定要调用的服务的应用名称 , fallbackFactory指定托底工厂类
@FeignClient(value = "user-server", fallbackFactory = UserFeignClientFallbackFactory.class)
public interface UserFeignClient {

    // openFeign接口编写，就是直接复制目标服务的请求接口方法
    // 调用哪个接口，就拷贝哪个接口方法
    /*
        接口底层原理
            1.我们的feign接口，在项目启动时会帮助我们动态代理一个实现类
            2.在项目启动时，我们加在启动类上的@EnableFeignClients会去扫描
                当前类同级以及以下所有包的feign接口类，动态代理一个实现类
            3.实现类的方法里面，就是根据接口上面的注解请求地址+方法上面的服务名称
                再使用Ribbon+RestTemplate进行负载均衡调用

       接口方法编写规则：
            1.接口的方法名称必须跟被调用方的方法名称一致
            2.接口的请求路径必须跟被调用方一致
            3.接口的参数和返回值必须跟被调用方一致
     */
    @GetMapping("/getById/{id}")
    User getById(@PathVariable("id") Long id);

}
